package com.gpb.common.transaction;

import org.springframework.jdbc.datasource.DataSourceTransactionManager;

/**
 * 编程式事务
 * 使用声明 一定要配合 try 使用
 * @author GuoPengBin
 * @dateTime Apr 15, 2014  10:26:13 AM
 */
public interface Transaction {

	public DataSourceTransactionManager getTransactionManager();

	public void setTransactionManager(
			DataSourceTransactionManager transactionManager);

	/**
	 * 开始事务
	 */
	public void begin();
	
	/**
	 * 设置事务类型
	 * 
	 * @param ransactionDefinition  (org.springframework.transaction.TransactionDefinition)
	 *   Spring在
	 *   TransactionDefinition接口中规定了7种类型的事务传播行为，
	 *   它们规定了事务方法和事务方法发生嵌套调用时事务如何进行传播： 表1事务传播行为类型 事务传播行为类型 说明 
	 *   PROPAGATION_REQUIRED 如果当前没有事务，就新建一个事务，如果已经存在一个事务中，加入到这个事务中。这是最常见的选择。 
	 *   PROPAGATION_SUPPORTS 支持当前事务，如果当前没有事务，就以非事务方式执行。 
	 *   PROPAGATION_MANDATORY 使用当前的事务，如果当前没有事务，就抛出异常。 
	 *   PROPAGATION_REQUIRES_NEW 新建事务，如果当前存在事务，把当前事务挂起。 
	 *   PROPAGATION_NOT_SUPPORTED 以非事务方式执行操作，如果当前存在事务，就把当前事务挂起。 
	 *   PROPAGATION_NEVER 以非事务方式执行，如果当前存在事务，则抛出异常。 
	 *   PROPAGATION_NESTED 如果当前存在事务，则在嵌套事务内执行。如果当前没有事务，则执行与 PROPAGATION_REQUIRED类似的操作。
	 */
	public void begin(int ransactionDefinition );
	/**
	 * 提交事务
	 */
	public void commit();

	/**
	 * 事务回滚
	 */
	public void rollback();

}